create or replace
PROCEDURE SP_GUARDAR_VENTA(
            p_id in out number, p_idPromocionConsumo in number,
            p_idClientePersona in number, p_coCodigoTarjetaPersona in varchar2, 
            p_idClienteEmpresa in number, p_coCodigoTarjetaEmpresa in varchar2,
            p_idProducto in number, p_coCodeManguera in varchar2,
            p_coCodeCara in varchar2, p_coCodeSurtidor in varchar2,
            p_coCodeIsla in varchar2, p_coCodeEstacion in varchar2,
            p_coSerie in varchar2, p_coNumero in varchar2,
            p_coCodeSerialImpresora in varchar2, p_coCodeTurnoHorario in varchar2,
            p_daFechaVenta in timestamp, p_daFechaProceso in timestamp,
            p_daFechaApertura in timestamp, p_daFechaLecturaInicio in timestamp,
            p_daFechaLecturaFin in timestamp, p_vaLecturaInicio in number,
            p_vaLecturaFinal in number, p_coRuc in varchar2,
            p_vaCantidad in number, p_vaPrecioUnitario in number,
            p_vaRecaudo in number, p_vaValorVenta in number,
            p_vaImpuesto in number, p_vaPrecioVenta in number,
            p_dePlaca in varchar2, p_coRecibo in varchar2,
            p_coReciboAnulado in varchar2, p_stVenta in varchar2,
            p_stOnline in varchar2, p_deMensaje in varchar2,
            p_vaPuntos in number, p_coCodeValeCredito in varchar2,
            p_coCodePromocionConsumo in varchar2, p_coCodeValePromocionConsumo in varchar2,
            p_coUsuarioCreador in varchar2, p_daFechaCreacion in timestamp,
            p_coUsuarioModificador in varchar2, p_daFechaModificacion in timestamp,
            p_vaSaldoCredito in number, p_stPasaTarjetaAntiguaPorAnul in char,
            p_observacionVentaRepetida in varchar2, p_ventaTrama in varchar2, 
            p_indicadorProceso out varchar2
) AS 

idVenta number(19);
coReciboAnulado varchar2(30);
coRuc varchar2(20);

err_num NUMBER;
err_msg VARCHAR2(2000);

BEGIN

    select SEQ_VENTA.nextval into idVenta from dual;
    
    if (FUNCTION_IS_NOT_BLANK(p_coreciboanulado) = 'Y' ) then
      coReciboAnulado := p_coreciboanulado;
    else
      coReciboAnulado := '';    
    end if;
    
    if (FUNCTION_IS_NOT_BLANK(p_coRuc) = 'Y' ) then
      coRuc := p_coRuc;
    else
      coRuc := '';    
    end if;    
    
    dbms_output.put_line('p_daFechaVenta '|| p_daFechaVenta);   
    
    insert into clpm_venta(id, version, co_code_cara, co_code_estacion, co_code_isla, 
          co_code_manguera, co_code_serial_impresora, co_code_surtidor, co_code_turno_horario, 
          co_code_vale_credito, co_code_vale_promocion, co_codigo_tarjeta_empresa, 
          co_codigo_tarjeta_persona, co_numero, co_recibo, co_recibo_anulado, 
          co_ruc, co_serie, co_usuario_creador, da_fecha_apertura, 
          da_fecha_creacion, da_fecha_lectura_fin, da_fecha_lectura_inicio, 
          da_fecha_proceso, da_fecha_venta, de_mensaje, 
          de_placa, st_online, st_venta, va_cantidad, va_lectura_final, va_lectura_inicio, 
          va_precio_unitario, va_precio_venta, va_puntos, 
          va_recaudo, va_valor_venta, clpb_cliente_empresa, clpb_cliente_persona, 
          clpb_producto, clpm_promocion_consumo, va_saldo_credito) 
    values(idVenta, 1, p_coCodeCara, p_coCodeEstacion, p_coCodeIsla,
          p_coCodeManguera, p_coCodeSerialImpresora, p_coCodeSurtidor, p_coCodeTurnoHorario,
          p_coCodeValeCredito, p_coCodeValePromocionConsumo, p_coCodigoTarjetaEmpresa,
          p_coCodigoTarjetaPersona, p_coNumero, p_coRecibo, coReciboAnulado,
          coRuc, p_coSerie, p_coUsuarioCreador, p_daFechaApertura,
          sysdate, p_daFechaLecturaFin, p_daFechaLecturaInicio, 
          p_daFechaProceso, p_daFechaVenta, p_deMensaje,
          p_dePlaca, p_stOnline, p_stVenta, p_vaCantidad, p_valecturafinal, p_valecturainicio,
          p_vapreciounitario, p_vaPrecioVenta, p_vapuntos, 
          p_vaRecaudo, p_vavalorventa, p_idclienteempresa, p_idclientepersona, 
          p_idproducto, p_idpromocionconsumo, p_vasaldocredito);  
          
    p_indicadorProceso := '1';
    p_id := idVenta;
    
EXCEPTION
  WHEN OTHERS THEN
    p_indicadorProceso := SQLERRM;
    err_num := SQLCODE;
    err_msg := SQLERRM;  
    dbms_output.put_line('err_msg = '|| err_msg);  
    rollback;  
  
END SP_GUARDAR_VENTA;